const express = require('express');
// 加载md5模块
const MD5 = require('md5');
//引入连接池模块
const pool = require('../pool.js');
//创建路由器对象
const r = express.Router();
//1.用户注册(post /reg)
r.post('/reg', (req, res) => {
  //1.1获取post请求的数据
req.body.password = MD5(req.body.password); 
  var obj = req.body;
  //1.2验证各项数据是否为空
  var i = 400;
  for (var k in obj) {
    i++;
    if (!obj[k]) {
      res.send({ code: i, msg: k + '不能为空' });
      return;
    }
  }
  // 先需要以name为条件进行用户的查找操作
  let sql = "SELECT COUNT(id) AS count FROM user_table WHERE name =?";
  // 执行SQL查询
  pool.query(sql, [obj.name], (err, results) => {
    if (err) throw err;
    // 如果聚合函数获得的结果为1那么就说明数据存在，不能写入到数据库中
    console.log(results[0].count);
    if (results[0].count) {//1会被转为true
      res.send({ code: 201, message: "用户名存在，注册失败", result: results });
    } else
      //1.3执行SQL命令，将数据插入到数据表
      pool.query('insert into user_table set ?', [obj], (err, result) => {
        if (err) {
          console.log(err);
          res.send({ code: 500, msg: '服务器端错误' });
          return;
        }
        res.send({ code: 200, msg: '注册成功' });
      });
  });
})

//2.用户登录(post /login)
r.post('/login', (req, res) => {
  //2.1获取post请求的数据
  req.body.password = MD5(req.body.password); 
  var obj = req.body;
  if (!obj.name) {
    res.send({ code: 401, msg: 'name不能为空' });
    return;
  }
  if (!obj.password) {
    res.send({ code: 402, msg: 'password不能为空' });
    return;
  }
  //2.3执行SQL命令
  pool.query('select * from user_table where name=? and password=?', [obj.name, obj.password], (err, result) => {
    if (err) {
      console.log(err);
      res.send({ code: 500, msg: '服务器端错误' });
      return;
    }
    console.log(result);
    //返回结果为数组，如果数组长度为0说明登录失败，否则登录成功
    if (result.length === 0) {
      res.send({ code: 201, msg: '登录失败' });
    } else {
      res.send({ code: 200, msg: '登录成功',info: result[0] });
    }
  });
});
//3.修改用户资料(post /编号)
r.post('/updateuser/:id', (req, res) => {
  //3.1获取传递的数据
  var obj1 = req.params;//路由传参
  var obj2 = req.body;//body传递
  console.log(obj1, obj2);
  //3.2验证数据是否为空
  var i = 400;
  for (var k in obj2) {
    i++;
    if (!obj2[k]) {
      res.send({ code: i, msg: k + '不能为空' });
      return;
    }
  }
  //3.3执行SQL命令，修改数据
  pool.query('update user_table set ? where id=?', [obj2, obj1.id], (err, result) => {
    if (err) {
      console.log(err);
      res.send({ code: 500, msg: '服务器端错误' });
      return;
    }
    console.log(result);
    //通过result下的affectedRows判断是否成功，如果是0表示失败
    if (result.affectedRows === 0) {
      res.send({ code: 201, msg: '修改失败' });
    } else {
      res.send({ code: 200, msg: '修改成功' });
    }
  });
});
//4.用户列表(get /)
r.get('/list', (req, res) => {
  //4.1获取查询字符串传递的数据
  var obj = req.query;
  //4.2验证是否为空
  if (!obj.pno) obj.pno = 1;
  if (!obj.count) obj.count = 15;
  //4.3计算开始查询的值
  var start = (obj.pno - 1) * obj.count;
  //4.4将每页的数据量强制转为整型
  var size = parseInt(obj.count);
  //4.5执行SQL命令
  pool.query('select * from user_table limit ?,?', [start, size], (err, result) => {
    if (err) {
      console.log(err);
      res.send({ code: 500, msg: '服务器端错误' });
      return;
    }
    res.send({ code: 200, msg: '查询成功', data: result });
  });
});

//导出路由器对象
module.exports = r;